lib.use(['element', 'form','laydate','table','searchInput','btnProp','tablePlug'], function () {
    var layer = layui.layer;
    var form = layui.form;
    var laydate = layui.laydate;
    var searchInput = layui.searchInput;
    var btnProp = layui.btnProp;
    var formForm = layui.Form('formForm');
    var table = layui.table;
    var tablePlug = layui.tablePlug;//表格插件
    var deliverLineTableObj;
    var reqUrl;
    var id=common.util.getParam('id');
    var probId=common.util.getParam('probId');
    table.set(common.layui.table.config(tablePlug));
    //各种控件初始化
    initControl();

    //表单提交方法
    form.on('submit(addFormSubmitFilter)', formSubmit);

    var tableConfig={
        elem: '#deliverLineTable'
        ,toolbar: '#toolbar'
        ,primaryKey: 'id'
        ,data: []
        ,even: true
        , cols: [[
            {type:'checkbox'}
            ,{type: 'numbers', title: '编号' }
            ,{ field: 'id',  hide: true }
            ,{ title: '商品编码', field: 'goodsCode',}
            ,{ title: '商品名称', field: 'goodsName',}
            ,{ title: '商品型号', field: 'goodsModel',}
            ,{ title: '商品规格', field: 'goodsSpec',}
            ,{ title: '基础数量', field: 'baseNum',}
            ,{ title: '基础单位', field: 'baseUomName',}
            ,{ title: '库存数量', field: 'qtyNum', event: 'setQtyNum',edit: 'number'}
            ,{ title: '计量单位', field: 'qtyUomName',}
            ,{ title: '辅助数量', field: 'auxNum', event: 'setAuxNum',edit: 'number'}
            ,{ title: '计量单位', field: 'auxUomName',}
            ,{ title: '商品单价', field: 'goodsPrice', event: 'setGoodsPrice',edit: 'number'}
            ,{ title: '商品挂牌价', field: 'goodsListPrice',}
            ,{ title: '商品金额', field: 'goodsAmount',}
            ,{ title: '商品折扣', field: 'goodsDiscount', event: 'setGoodsDiscount',edit: 'number'}
            ,{ title: '件换算', field: 'converUnit1',}
            ,{ title: '片换算', field: 'converUnit2',}
            ,{ title: '备注', field: 'remark', event: 'setRemark',edit: 'text'}
        ]]
    };

    // 渲染从表表格
    deliverLineTableObj = table.render(tableConfig)

    //明细添加按钮
    btnProp.render($.extend(BASE_GOODS_CONFIG_MULTIPLE,{
        dst: '#add',
        done:function(ck){
            addRowLine(ck.data);
        }
    }));
    //头工具栏事件
    table.on('toolbar(deliverLineTableFilter)', function(obj){
        var checkStatus = table.checkStatus(obj.config.id);
        if(obj.event=='del'){
            delLine(table.checkStatus('deliverLineTable'))
        }

    })

    // 监听编辑如果商品数量为非正整数时默认为1 并且弹出提示信息并且重新获得焦点等待输入
    table.on('edit(deliverLineTableFilter)', rowEditFun);



    /**
     * 页面加载完成调用方法
     * 初始化方法可以写在这里
     */
    (function () {
        common.util.windowMode(probId);
        id?loadFormData(id):addInit();
    })();


//=====================================================各种自定义方法==========================================================


    /**
     * 页面控件初始化
     */
    function initControl() {


        //初始化日期控件


        //销售订单编码弹出窗口
        searchInput.render($.extend(true,SALE_ORDER_HEAD_CONFIG_SINGLE,{
            dst: '#orderNoSearchInput',
            table: {
                where:{probId:probId,orderState:2}
            },
            done:function (obj,nextObj,datas) {
                layer.close(layer.index);
                proHeadInfo(datas[0].id);
            }
        }));


            //仓库名称弹出窗口
        searchInput.render($.extend(BASE_WAREHOUSE_CONFIG_SINGLE,{
            dst: '#warehouseNameSearchInput',
            done:function (obj,nextObj,datas) {
                var data={
                        warehouseId:datas[0].id,
                        warehouseCode:datas[0].warehouseCode,
                        warehouseName:datas[0].warehouseName
                    }
                form.val('formForm',data);
            }
        }));


        //填冲下拉框数据字典
        //<select name="dbType" dist-name="sys.Ent_DbTypeEnum" config='{"data": [{"value": "全部","key": "0","index":"2"}],"selectedIndex": "1"}'></select>
        //config:{
        //    data:{[                 自定义下拉框数据
        //          value:'全部',      显示文字
        //          key:0,            值
        //          index:1           当前值需要插入位置(累加完自定义数据后再从下标从0计算)
        //          ]},
        //    selectedIndex:1         当前下拉框默然选中位置（下标从0计算)
        // }
        formForm.selectRender();

        /**
         * Form表单校验
         */
        form.verify({
                /*deliverNo: function(value, item){
                if(!value){
                    return '单据编码不能为空';
                }
            },*/
            probNo: function(value, item){
                if(!value){
                    return '预订单编码不能为空';
                }
            },
            orderNo: function(value, item){
                if(!value){
                    return '销售订单编码不能为空';
                }
            },
            storeName: function(value, item){
                if(!value){
                    return '门店名称不能为空';
                }
            },
           /* warehouseCode: function(value, item){
                if(!value){
                    return '仓库编码不能为空';
                }
            },*/
            warehouseName: function(value, item){
                if(!value){
                    return '仓库名称不能为空';
                }
            },
            customerCode: function(value, item){
                if(!value){
                    return '客户编码不能为空';
                }
            },
            customerName: function(value, item){
                if(!value){
                    return '客户名称不能为空';
                }
            },
            customerContactName: function(value, item){
                if(!value){
                    return '客户联系人不能为空';
                }
            },
            customerContactTel: function(value, item){
                if(!value){
                    return '客户电话不能为空';
                }
            },
            customerContactAdd: function(value, item){
                if(!value){
                    return '送货地址不能为空';
                }
            },
            deliverType: function(value, item){
                if(!value){
                    return '单据类型不能为空';
                }
            },
        });
    }

    function formSubmit(data) {
        if(!common.layui.table.verify(table,tableConfig)){
            return
        }
        var param = formForm.getData();

        if( table.cache['deliverLineTable'].length==0){
            common.util.error('"销售发货单明细数据不能为空');
            return false;
        }
        param.deliverLineEntityList=table.cache['deliverLineTable'];
        param=beforeSave(param);
        console.log(param)
        common.ajax.post(reqUrl, param, function (resp) {
            afterSave(resp);
            common.util.alert('操作成功', function () {
                common.util.returnWindow('deliverHeadList.html',param)
            })
        })
        return false;
    }
    /**
     * 删除明细行
     * @param obj
     */
    function delLine(obj) {
        // 获得当前选中的，不管它的状态是什么？只要是选中的都会获得
        var checkedIds;
        if (deliverLineTableObj.config.checkStatus) {
            // 开启了复选状态记忆
            checkedIds = tablePlug.tableCheck.getChecked(deliverLineTableObj.config.id);
        } else {
            // 不开启
            checkedIds = table.checkStatus(deliverLineTableObj.config.id).data;
        }
        if(checkedIds.length==0)return;
        layer.confirm('确认删除!', function(index){
            tablePlug.del(deliverLineTableObj.config.id, checkedIds);
            layer.close(index);
            layer.msg('删除成功！', {icon: 1});
        });
    }




    /**
     * 明细行编辑事件
     * @param obj
     */
    function rowEditFun(obj) {

        var that = this;
        var converData=busCommon.conver(obj.data);
        var data={baseNum:converData.baseNum,goodsAmount:converData.baseNum*converData.goodsPrice-converData.goodsDiscount};
        console.log(data);
        obj.update(data);


    }

    /**
     * 明细行添加后调用方法
     * @param datas
     */
    function addRowLine(_datas) {
        var newDatas=[];
        $.each(_datas,function () {
            //属性更换
            this.goodsListPrice=this.listPrice;
            this.baseNum=0;
            this.goodsPrice=0;
            this.goodsDiscount=0;
            this.goodsAmount=0;
            this.goodsId=this.id;
            newDatas.push(this)
        })
        var config=
            {
                table:table,
                tableObj:deliverLineTableObj,
                fromPk: "goodsId",
                datas:newDatas,
                done: function (obj,newObj) {
                    return obj;
                }
            }
        common.layui.table.addRows(config);
    }
    /**
     * 编辑时加载数据
     */
    function loadFormData(id) {
        common.ajax.get('/sale/deliverHead/info/'+id, {}, function (resp) {
            formForm.setData(updateInit(resp.deliverHead));
            common.layui.table.get('deliverLineTable').load(resp.deliverHead.deliverLineEntityList)
            afterLoadFormData(resp.deliverHead);
        });
    }

    /**
     * 编辑时加载数据
     */
    function afterLoadFormData(deliverHead) {
        //状态特殊业务时对操作按钮的禁用
        if(deliverHead.deliverState==2){
            common.util.disabledBtnInput()
        }

    }

    /**
     * 新增调用方法
     *
     */
    function addInit() {
        //新增
        reqUrl='/sale/deliverHead/save';
        //设置新增初始值
        var defVal={
            isValid:1,
            deliverDate:common.util.getDate()
        }
        formForm.setData(defVal);
        $(".disabled-row").hide();
    }

    /**
     * 修改调用方法
     * @param data 当前对像参数
     * @returns {*}
     */
    function updateInit(data) {
        reqUrl='/sale/deliverHead/update';
        //更新时的其它操作
        return data
    }


    /**
     * 保存前调用方法
     * @param param
     * @returns {*}
     */
    function beforeSave(data) {
        //保存前的其它操作
        return data;
    }
    /**
     * 保存后调用方法
     */
    function afterSave(data) {
        //保存后的其它操作
    }
    /**加载预订单信息
     * @param probId
     */
    function proHeadInfo(orderId){
        if(orderId){
            common.ajax.get('/sale/orderHead/info/'+orderId, {}, function (resp) {
                var data={
                    probId:resp.data.probId,
                    probNo:resp.data.probNo,
                    orderId:resp.data.id,
                    orderNo:resp.data.orderNo,
                    storeId:resp.data.storeId,
                    storeName:resp.data.storeName,
                    customerId:resp.data.customerId,
                    customerCode:resp.data.customerCode,
                    customerName:resp.data.customerName,
                    customerContactName:resp.data.customerContactName,
                    customerContactTel:resp.data.customerContactTel,
                    customerContactAdd:resp.data.customerContactAdd
                }
                form.val('formForm',data);

            });
        }
    }
});
